﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Infrastucture;

namespace TimeSplicerModule.DomainModels
{
    public class ProjectModel : DomainObject
    {
        #region Fields...
        private Guid _projectGuid;
        private Guid _categoryGuid;
        private Guid _priorityGuid;
        private Guid _statusGuid;
        private Guid _projectManagerGuid;
        private Guid _createdByGuid;
        private Guid _selectedTaskUserGuid;
        private Guid _selectedStatusGuid;
        private string _name;
        private string _description;
        private double _estimatedHours;
        private DateTime _startedDate;
        private DateTime _dueDate;
        private DateTime _completedDate;
        private DateTime _createdDate;
        private double _hours;
        private double _actualHours;
        public bool _isBucket;
        private CategoryModel _category;
        private PriorityModel _priority;
        private StatusModel _status;
        private UserModel _projectManager;
        private UserModel _createdBy;
        private List<CategoryModel> _categories;
        private List<PriorityModel> _priorities;
        private List<UserModel> _projectManagers;
        private List<UserModel> _users;
        private List<ProjectRoleModel> _projectRoles;
        private List<ProjectUserModel> _projectUsers;
        private ObservableCollection<ProjectUserModel> _observableProjectUsers;
        private List<TaskModel> _tasks;
        private ObservableCollection<TaskModel> _filteredTasks;
        private List<StatusModel> _taskStatuses;
        #endregion Fields

        #region Properties...
        public Guid ProjectGuid
        {
            get { return _projectGuid; }
            set { SetProperty(ref _projectGuid, value); }
        }
        public Guid CategoryGuid
        {
            get { return _categoryGuid; }
            set { SetProperty(ref _categoryGuid, value); }
        }
        public Guid PriorityGuid
        {
            get { return _priorityGuid; }
            set { SetProperty(ref _priorityGuid, value); }
        }
        public Guid StatusGuid
        {
            get { return _statusGuid; }
            set { SetProperty(ref _statusGuid, value); }
        }
        public Guid CreatedByGuid
        {
            get { return _createdByGuid; }
            set { SetProperty(ref _createdByGuid, value); }
        }
        public Guid ProjectManagerGuid
        {
            get { return _projectManagerGuid; }
            set { SetProperty(ref _projectManagerGuid, value); }
        }
        public Guid SelectedTaskUserGuid
        {
            get { return _selectedTaskUserGuid; }
            set { SetProperty(ref _selectedTaskUserGuid, value); }
        }
        public Guid SelectedStatusGuid
        {
            get { return _selectedStatusGuid; }
            set { SetProperty(ref _selectedStatusGuid, value); }
        }
        public string Name
        {
            get { return _name; }
            set { SetProperty(ref _name, value); }
        }
        public string Description
        {
            get { return _description; }
            set { SetProperty(ref _description, value); }
        }
        public double EstimatedHours
        {
            get { return _estimatedHours; }
            set { SetProperty(ref _estimatedHours, value); }
        }
        public DateTime StartedDate
        {
            get { return _startedDate; }
            set { SetProperty(ref _startedDate, value); }
        }
        public DateTime DueDate
        {
            get { return _dueDate; }
            set { SetProperty(ref _dueDate, value); }
        }
        public DateTime CompletedDate
        {
            get { return _completedDate; }
            set { SetProperty(ref _completedDate, value); }
        }
        public DateTime CreatedDate
        {
            get { return _createdDate; }
            set { SetProperty(ref _createdDate, value); }
        }
        public double Hours
        {
            get { return _hours; }
            set { SetProperty(ref _hours, value); }
        }
        public double ActualHours
        {
            get { return _actualHours; }
            set { SetProperty(ref _actualHours, value); }
        }
        public bool IsBucket
        {
            get { return _isBucket; }
            set { SetProperty(ref _isBucket, value); }
        }
        public CategoryModel Category
        {
            get { return _category; }
            set { SetProperty(ref _category, value); }
        }
        public PriorityModel Priority
        {
            get { return _priority; }
            set { SetProperty(ref _priority, value); }
        }
        public StatusModel Status
        {
            get { return _status; }
            set { SetProperty(ref _status, value); }
        }
        public UserModel ProjectManager
        {
            get { return _projectManager; }
            set { SetProperty(ref _projectManager, value); }
        }
        public UserModel CreatedBy
        {
            get { return _createdBy; }
            set { SetProperty(ref _createdBy, value); }
        }
        public List<CategoryModel> Categories
        {
            get { return _categories; }
            set { SetProperty(ref _categories, value); }
        }
        public List<PriorityModel> Priorities
        {
            get { return _priorities; }
            set { SetProperty(ref _priorities, value); }
        }
        public List<UserModel> ProjectManagers
        {
            get { return _projectManagers; }
            set { SetProperty(ref _projectManagers, value); }
        }
        public List<UserModel> Users
        {
            get { return _users; }
            set { SetProperty(ref _users, value); }
        }
        public List<ProjectRoleModel> ProjectRoles
        {
            get { return _projectRoles; }
            set { SetProperty(ref _projectRoles, value); }
        }
        public List<ProjectUserModel> ProjectUsers
        {
            get { return _projectUsers; }
            set { SetProperty(ref _projectUsers, value); }
        }
        public ObservableCollection<ProjectUserModel> ObservableProjectUsers
        {
            get { return _observableProjectUsers; }
            set { SetProperty(ref _observableProjectUsers, value); }
        }
        public List<TaskModel> Tasks
        {
            get { return _tasks; }
            set { SetProperty(ref _tasks, value); }
        }
        public ObservableCollection<TaskModel> FilteredTasks
        {
            get { return _filteredTasks; }
            set { SetProperty(ref _filteredTasks, value); }
        }
        public List<StatusModel> TaskStatuses
        {
            get { return _taskStatuses; }
            set { SetProperty(ref _taskStatuses, value); }
        }
        #endregion Properties
    }
}
